package example.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 获取用户角色信息，这里假设从请求中获取
        String role = request.getHeader("Role");

        // 获取请求的 API 路径
        String requestURI = request.getRequestURI();

        // 根据角色和请求路径判断是否有权限访问
        if ("ADMIN".equals(role)) {
            // 管理员有权限访问所有 API
            return true;
        } else if ("USER".equals(role)) {
            // 用户只能访问部分 API
            if (isAllowed(requestURI)) {
                return true;
            } else {
                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
                return false;
            }
        } else {
            // 其他角色或未登录用户拒绝访问
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return false;
        }
    }

    private boolean isAllowed(String requestURI) {
        // 在这里实现根据请求路径判断用户是否有权限访问的逻辑
        // 这里可以是硬编码的权限判断，也可以是从数据库或配置文件中获取的动态权限
        // 返回true表示有权限，返回false表示无权限
        // 这里只是一个示例，实际项目中根据需求实现相应的权限判断逻辑
        return requestURI.startsWith("/api/user/");
    }
}
